class Solution {
public:
    std::vector<int> subSort(std::vector<int>& nums) {
        int n = nums.size();
        if (n <= 1) {
            return {-1, -1};
        }
        int left = -1, right = -1;
        for (int i = 0; i < n - 1; i++) {
            if (nums[i] > nums[i + 1]) {
                left = i;
                break;
            }
        }
        if (left == -1) {
            return {-1, -1};
        }
        for (int i = n - 1; i > 0; i--) {
            if (nums[i] < nums[i - 1]) {
                right = i;
                break;
            }
        }
        int subarrayMin = INT_MAX;
        int subarrayMax = INT_MIN;
        for (int i = left; i <= right; i++) {
            subarrayMin = std::min(subarrayMin, nums[i]);
            subarrayMax = std::max(subarrayMax, nums[i]);
        }
        while (left > 0 && nums[left - 1] > subarrayMin) {
            left--;
        }
        while (right < n - 1 && nums[right + 1] < subarrayMax) {
            right++;
        }
        return {left, right};
    }
};